/**
 * 用户模块校验文件
 */

const joi = require('joi');
const { messages, validPage } = require('./common');

/**
 * 校验密码
 */
const password = joi.string().label('密码').min(6).max(20).required().messages(messages);

/**
 * id的校验
 */
const id = joi.number().integer().label('id').min(1).required().messages(messages);

/**
 * 公共校验内容
 */
const validCommon = joi.object({
    role_id: joi.number().integer().label('角色id').min(1).required().messages(messages),
    email: joi.string().email().label('邮箱').max(20).allow('', null).messages(messages),
    phone: joi.string().label('手机号').required().pattern(/^1[3-9]\d{9}$/).messages(messages)
});

/**
 * 校验添加
 */
const validAdd = joi.object({
    username: joi.string().label('用户名').max(20).required().messages(messages),
    password
}).concat(validCommon);

/**
 * 校验修改
 */
const validUpdate = joi.object({
    id: joi.number().integer().label('id').min(1).required().messages(messages)
}).concat(validCommon);

/**
 * 校验修改密码
 */
const validUpdatePassword = joi.object({
    id,
    password,
    confirmPassword: joi.string().label('确认密码').required().min(6).max(20).valid(joi.ref('password')).messages({
        ...messages,
        'any.only': '两次输入的密码不一致'
    })
});

/**
 * 校验更改状态
 */
const validChangeStatus = joi.object({
    id,
    status: joi.boolean().label('状态').valid('1', '0', null, '').required().messages(messages)
});

/**
 * 校验搜索
 */
const validSearch = joi.object({
    role_id: joi.number().integer().label('角色id').min(0).allow(null).messages(messages),
    status: joi.string().label('状态').valid('1', '0', null, '').messages(messages),
    username: joi.string().label('用户名').max(20).allow(null, '').messages(messages),
    email: joi.string().label('邮箱').max(20).allow(null, '').messages(messages),
    phone: joi.string().label('手机号').max(11).allow(null, '').messages(messages),
}).concat(validPage);

/**
 * 校验登录
 */
const validLogin = joi.object({
    username: joi.string().label('用户名').max(20).required().messages(messages),
    password
});

module.exports = {
    validAdd,
    validLogin,
    validUpdate,
    validSearch,
    validChangeStatus,
    validUpdatePassword,
}